package com.heyige.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.heyige.dto.PromptTemplateDto;
import com.heyige.entity.PromptTemplate;

import java.util.List;
import java.util.Map;

public interface PromptTemplateService extends IService<PromptTemplate> {
    
    /**
     * 获取提示词模板列表
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplates(Page<PromptTemplate> page);
    
    /**
     * 根据类型获取提示词模板列表
     * @param type 类型
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplatesByType(PromptTemplate.TemplateType type, Page<PromptTemplate> page);
    
    /**
     * 根据分类获取提示词模板列表
     * @param category 分类
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplatesByCategory(String category, Page<PromptTemplate> page);
    
    /**
     * 根据标签搜索提示词模板列表
     * @param tags 标签
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplatesByTags(String tags, Page<PromptTemplate> page);
    
    /**
     * 获取用户的提示词模板列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getUserPromptTemplates(Long userId, Page<PromptTemplate> page);
    
    /**
     * 获取公共提示词模板列表
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPublicPromptTemplates(Page<PromptTemplate> page);
    
    /**
     * 获取提示词模板详情
     * @param id 提示词模板ID
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse getPromptTemplate(Long id);
    
    /**
     * 添加提示词模板
     * @param userId 用户ID
     * @param request 添加请求
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse addPromptTemplate(Long userId, PromptTemplateDto.AddRequest request);
    
    /**
     * 更新提示词模板
     * @param id 提示词模板ID
     * @param userId 用户ID
     * @param request 更新请求
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse updatePromptTemplate(Long id, Long userId, PromptTemplateDto.UpdateRequest request);
    
    /**
     * 删除提示词模板
     * @param id 提示词模板ID
     * @param userId 用户ID
     */
    void deletePromptTemplate(Long id, Long userId);
    
    /**
     * 复制提示词模板
     * @param id 提示词模板ID
     * @param userId 用户ID
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse copyPromptTemplate(Long id, Long userId);
    
    /**
     * 处理提示词模板
     * @param id 提示词模板ID
     * @param variables 变量
     * @return 处理后的提示词
     */
    PromptTemplateDto.ProcessResult processPromptTemplate(Long id, Map<String, String> variables);
    
    /**
     * 获取热门提示词模板
     * @param limit 限制数量
     * @return 提示词模板列表
     */
    List<PromptTemplateDto.TemplateResponse> getHotPromptTemplates(Integer limit);
    
    /**
     * 获取小红书文案模板
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getRedBookTemplates(Page<PromptTemplate> page);
}